home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / xml / XSDLReader.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  24.8 KB  |  1,226 lines

  1. package com.extensibility.xml;
  2.  
  3. import com.extensibility.xml.dt.DataType;
  4. import com.extensibility.xml.dt.DataTypeFactory;
  5. import com.extensibility.xml.dt.DataTypeIntf;
  6. import com.extensibility.xml.dt.Facet;
  7. import java.io.FileNotFoundException;
  8. import java.io.IOException;
  9. import java.io.Reader;
  10. import java.net.UnknownHostException;
  11. import java.util.Hashtable;
  12. import java.util.Stack;
  13. import java.util.Vector;
  14. import org.xml.sax.AttributeList;
  15. import org.xml.sax.HandlerBase;
  16. import org.xml.sax.InputSource;
  17. import org.xml.sax.Locator;
  18. import org.xml.sax.Parser;
  19. import org.xml.sax.SAXException;
  20. import org.xml.sax.SAXParseException;
  21. import org.xml.sax.helpers.LocatorImpl;
  22.  
  23. public final class XSDLReader extends HandlerBase implements XSDLTags {
  24.    private Hashtable elemDecls;
  25.    private Hashtable dtElemNames;
  26.    private Hashtable currentAttrs;
  27.    private ElementDeclaration currentElemDecl;
  28.    private DataTypeDeclaration currentDataTypeDecl;
  29.    private String topLevelElemName;
  30.    private String currentElemName;
  31.    private AttributeDeclaration currentAttrDecl;
  32.    private Vector attrChoices;
  33.    private Vector elemDeclAttrs;
  34.    private Hashtable namespaces;
  35.    private SchemaIntf schema;
  36.    private ContentModel currentCM;
  37.    private boolean isFirstLevelCM;
  38.    private boolean cmClosed;
  39.    private Stack cmConnectors;
  40.    private Stack contentModels;
  41.    private Object commentKind;
  42.    private StringBuffer commentContent;
  43.    private boolean commentStart;
  44.    private boolean optionStart;
  45.    private boolean defaultStart;
  46.    private String defaultContent;
  47.    private Stack currentContentIPEs;
  48.    private Hashtable savedContentIPEs;
  49.    private Stack currentAttrIPEs;
  50.    private Hashtable savedAttrIPEs;
  51.    private InternalPEDeclaration currentIPEDecl;
  52.    private NotationDeclaration currentNotationDecl;
  53.    private boolean inProlog = true;
  54.    private Locator locator;
  55.    public URI logicalURI;
  56.  
  57.    public XSDLReader(SchemaIntf var1) {
  58.       this.schema = var1;
  59.    }
  60.  
  61.    public void error(String var1, int var2, int var3, int var4) {
  62.       ParserException var5 = new ParserException(var2, var1);
  63.       var5.setSource(String.valueOf(String.valueOf(String.valueOf(String.valueOf("See Line: ").concat(String.valueOf(var3))).concat(String.valueOf(" Column:"))).concat(String.valueOf(var4))).concat(String.valueOf(" in file.")));
  64.       var5.setSourceLinePos(var3);
  65.       this.schema.addError(var5);
  66.    }
  67.  
  68.    public void error(SAXParseException var1) {
  69.       this.error(((SAXException)var1).getMessage(), 240, this.locator.getLineNumber(), this.locator.getColumnNumber());
  70.    }
  71.  
  72.    public void fatalError(SAXParseException var1) {
  73.       this.error(var1);
  74.    }
  75.  
  76.    public void setDocumentLocator(Locator var1) {
  77.       this.locator = var1;
  78.    }
  79.  
  80.    public void parse(URI var1, URI var2) throws IOException {
  81.       this.logicalURI = var2;
  82.       Reader var4 = null;
  83.  
  84.       try {
  85.          Parser var3 = SchemaUtilities.getParser();
  86.          this.setDocumentLocator(new LocatorImpl());
  87.          var3.setEntityResolver(this);
  88.          var3.setErrorHandler(this);
  89.          var3.setDocumentHandler(this);
  90.          var4 = var1.createReader();
  91.          var3.parse(new InputSource(var4));
  92.       } catch (IOException var16) {
  93.          throw var16;
  94.       } catch (Exception var17) {
  95.          if (!(var17 instanceof IOException)) {
  96.          }
  97.       } finally {
  98.          try {
  99.             if (var4 != null) {
  100.                var4.close();
  101.             }
  102.          } catch (IOException var15) {
  103.          }
  104.  
  105.       }
  106.  
  107.    }
  108.  
  109.    public void startDocument() {
  110.       this.elemDecls = new Hashtable();
  111.       this.dtElemNames = new Hashtable();
  112.       this.currentAttrs = new Hashtable();
  113.       this.currentElemDecl = null;
  114.       this.currentDataTypeDecl = null;
  115.       this.topLevelElemName = null;
  116.       this.currentAttrDecl = null;
  117.       this.attrChoices = new Vector();
  118.       this.elemDeclAttrs = new Vector();
  119.       this.namespaces = new Hashtable();
  120.       this.isFirstLevelCM = true;
  121.       this.cmClosed = true;
  122.       this.cmConnectors = new Stack();
  123.       this.contentModels = new Stack();
  124.       this.commentKind = null;
  125.       this.commentContent = new StringBuffer();
  126.       this.commentStart = false;
  127.       this.optionStart = false;
  128.       this.defaultStart = false;
  129.       this.defaultContent = null;
  130.       this.currentContentIPEs = new Stack();
  131.       this.savedContentIPEs = new Hashtable();
  132.       this.currentAttrIPEs = new Stack();
  133.       this.savedAttrIPEs = new Hashtable();
  134.       this.currentIPEDecl = null;
  135.    }
  136.  
  137.    public void endDocument() {
  138.    }
  139.  
  140.    public void processingInstruction(String var1, String var2) throws SAXException {
  141.       ProcessingInstruction var3 = new ProcessingInstruction(var1, var2);
  142.       if (this.inProlog) {
  143.          ((BaseDeclaration)var3).setIsInProlog(true);
  144.       }
  145.  
  146.       this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  147.    }
  148.  
  149.    private char getCurrentConnection() {
  150.       return (Character)this.cmConnectors.peek();
  151.    }
  152.  
  153.    private ContentModelTerm getCurrentParent() {
  154.       return (ContentModelTerm)this.contentModels.peek();
  155.    }
  156.  
  157.    public void startElement(String var1, AttributeList var2) {
  158.       this.inProlog = false;
  159.       this.parseElement(var1, var2);
  160.    }
  161.  
  162.    private void saveNamespaceInfo(String var1, String var2) {
  163.       int var4 = var1.indexOf(":");
  164.       if (var4 != -1) {
  165.          String var5 = var1.substring(var4 + 1);
  166.          if (var5 != null && var5.length() > 0) {
  167.             NamespaceDeclaration var3 = new NamespaceDeclaration(var5, var2);
  168.             this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  169.             this.namespaces.put(var2, var3);
  170.          }
  171.       }
  172.  
  173.    }
  174.  
  175.    private void doSchema(AttributeList var1) {
  176.       String var2 = null;
  177.       Object var3 = null;
  178.       Object var4 = null;
  179.       Object var5 = null;
  180.       Object var6 = null;
  181.       Object var7 = null;
  182.       Object var8 = null;
  183.       Object var9 = null;
  184.  
  185.       for(int var10 = 0; var10 < var1.getLength(); ++var10) {
  186.          String var11 = var1.getName(var10);
  187.          if (var11.equals("xmlns")) {
  188.             var1.getValue(var10);
  189.          } else if (var11.equals("version")) {
  190.             var1.getValue(var10);
  191.          } else if (var11.equals("targetNamespace")) {
  192.             var2 = var1.getValue(var10);
  193.          } else if (var11.equals("finalDefault")) {
  194.             var1.getValue(var10);
  195.          } else if (var11.equals("blockDefault")) {
  196.             var1.getValue(var10);
  197.          } else if (var11.equals("elementFormDefault")) {
  198.             var1.getValue(var10);
  199.          } else if (var11.equals("attributeFormDefault")) {
  200.             var1.getValue(var10);
  201.          } else if (var11.equals("id")) {
  202.             var1.getValue(var10);
  203.          } else if (var11.startsWith("xmlns:")) {
  204.             this.saveNamespaceInfo(var11, var1.getValue(var10));
  205.          } else {
  206.             this.error(String.valueOf("Unrecognized attribute for 'schema' : ").concat(String.valueOf(var11)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  207.          }
  208.       }
  209.  
  210.       if (var2 != null) {
  211.          this.schema.setNamespace(new URI((URI)null, var2));
  212.       }
  213.  
  214.    }
  215.  
  216.    private void doImport(AttributeList var1) {
  217.       String var2 = null;
  218.       String var3 = null;
  219.  
  220.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  221.          String var5 = var1.getName(var4);
  222.          if (var5.equals("schemaLocation")) {
  223.             var2 = var1.getValue(var4);
  224.          } else if (var5.equals("namespace")) {
  225.             var3 = var1.getValue(var4);
  226.          } else {
  227.             this.error(String.valueOf("Unrecognized attribute for 'import' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  228.          }
  229.       }
  230.  
  231.       Object var7 = null;
  232.       Object var6 = null;
  233.       if (var3 != null) {
  234.          NamespaceDeclaration var8 = (NamespaceDeclaration)this.namespaces.get(var3);
  235.          if (var8 == null) {
  236.             this.error(String.valueOf("Namespace not declared :").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  237.             var8 = new NamespaceDeclaration("undefinedPrefix", var3);
  238.             this.schema.insertDeclaration(var8, (BaseDeclaration)null);
  239.             this.namespaces.put(var3, var8);
  240.          }
  241.  
  242.          URI var9;
  243.          if (var2 != null) {
  244.             var9 = new URI((URI)null, var2);
  245.          } else {
  246.             var9 = new URI((URI)null, var3);
  247.          }
  248.  
  249.          var8.setSchemaLoc(var9);
  250.       } else {
  251.          this.error("Namespace required for 'import'", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  252.       }
  253.    }
  254.  
  255.    private void doInclude(AttributeList var1) {
  256.       String var2 = null;
  257.  
  258.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  259.          String var4 = var1.getName(var3);
  260.          if (var4.equals("schemaLocation")) {
  261.             var2 = var1.getValue(var3);
  262.          } else {
  263.             this.error(String.valueOf("Unrecognized attribute for 'include' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  264.          }
  265.       }
  266.  
  267.       if (var2 == null) {
  268.          this.error("The 'schemaLocation' attribute is required for 'include'.", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  269.       } else {
  270.          new URI((URI)null, var2);
  271.          URI var12 = new URI(this.logicalURI, var2);
  272.          String var5 = DTDUtilities.makeValidName(var12.getShortName());
  273.          if (this.schema.getNamedDeclaration(var5, Class.forName("com.extensibility.xml.ParameterEntityDeclaration")) == null) {
  274.             ExternalPEDeclaration var6 = new ExternalPEDeclaration(var5, (String)null, var12);
  275.             ((BaseDeclaration)var6).setURI(this.logicalURI);
  276.             this.schema.insertDeclaration(var6, (BaseDeclaration)null);
  277.  
  278.             try {
  279.                int var7 = this.schema.insertSubset(var6);
  280.                if (var7 > 0) {
  281.                   this.error(((BaseDeclaration)var6).getName(), 246, this.locator.getLineNumber(), this.locator.getColumnNumber());
  282.                }
  283.  
  284.                ExternalSubset var10000 = (ExternalSubset)this.schema.getNamedDeclaration(var5, Class.forName("com.extensibility.xml.ExternalSubset"));
  285.             } catch (UnknownHostException var9) {
  286.                this.error(var12.getFullName(), 245, this.locator.getLineNumber(), this.locator.getColumnNumber());
  287.             } catch (FileNotFoundException var10) {
  288.                this.error(var12.getShortName(), 244, this.locator.getLineNumber(), this.locator.getColumnNumber());
  289.             } catch (IOException var11) {
  290.                this.error(((Throwable)var11).getMessage(), 247, this.locator.getLineNumber(), this.locator.getColumnNumber());
  291.             }
  292.  
  293.          }
  294.       }
  295.    }
  296.  
  297.    private void doType(AttributeList var1) {
  298.       Object var2 = null;
  299.       String var3 = null;
  300.       Object var4 = null;
  301.       String var5 = null;
  302.       Object var6 = null;
  303.       Object var7 = null;
  304.       Object var8 = null;
  305.       String var9 = null;
  306.       Object var10 = null;
  307.  
  308.       for(int var11 = 0; var11 < var1.getLength(); ++var11) {
  309.          String var12 = var1.getName(var11);
  310.          if (var12.equals("abstract")) {
  311.             var1.getValue(var11);
  312.          } else if (var12.equals("base")) {
  313.             var3 = var1.getValue(var11);
  314.          } else if (var12.equals("block")) {
  315.             var1.getValue(var11);
  316.          } else if (var12.equals("content")) {
  317.             var5 = var1.getValue(var11);
  318.          } else if (var12.equals("derivedBy")) {
  319.             var1.getValue(var11);
  320.          } else if (var12.equals("exact")) {
  321.             var1.getValue(var11);
  322.          } else if (var12.equals("final")) {
  323.             var1.getValue(var11);
  324.          } else if (var12.equals("name")) {
  325.             var9 = var1.getValue(var11);
  326.          } else if (var12.equals("id")) {
  327.             var1.getValue(var11);
  328.          } else {
  329.             this.error(String.valueOf("Unrecognized attribute for 'complexType' : ").concat(String.valueOf(var12)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  330.          }
  331.       }
  332.  
  333.       if (var5 == null) {
  334.          var5 = "mixed";
  335.       }
  336.  
  337.       byte var13 = 0;
  338.       this.cmClosed = false;
  339.       if (var5.equals("empty")) {
  340.          var13 = 3;
  341.          this.cmClosed = true;
  342.       } else if (var5.equals("mixed")) {
  343.          var13 = 4;
  344.       } else if (var5.equals("textOnly")) {
  345.          var13 = 5;
  346.          this.cmClosed = true;
  347.       } else if (var5.equals("elementOnly")) {
  348.          var13 = 6;
  349.       } else {
  350.          var13 = 3;
  351.       }
  352.  
  353.       if (this.currentElemDecl == null) {
  354.          if (this.elemDecls.containsKey(var9)) {
  355.             this.currentElemDecl = (ElementDeclaration)this.elemDecls.get(var9);
  356.          } else {
  357.             this.currentElemDecl = new ElementDeclaration(var9, 3);
  358.             this.currentElemDecl.setURI(this.logicalURI);
  359.             this.elemDecls.put(var9, this.currentElemDecl);
  360.          }
  361.  
  362.          this.topLevelElemName = var9;
  363.       }
  364.  
  365.       this.currentCM = this.currentElemDecl.getContentModel();
  366.       this.currentCM.setContentModel(var13);
  367.       this.isFirstLevelCM = true;
  368.       if (var3 != null && this.currentElemDecl != null) {
  369.          this.currentElemDecl.setDataType(this.convertDataType(var3));
  370.       }
  371.  
  372.       this.cmConnectors.push(new Character(','));
  373.       this.contentModels.push(this.currentCM.getRootGroup());
  374.    }
  375.  
  376.    private void doAnnotation(AttributeList var1) {
  377.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  378.          String var3 = var1.getName(var2);
  379.          this.error(String.valueOf("Unrecognized attribute for 'annotation' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  380.       }
  381.  
  382.    }
  383.  
  384.    private void doAttrGroup(AttributeList var1) {
  385.       Object var2 = null;
  386.       String var3 = null;
  387.       String var4 = null;
  388.  
  389.       for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  390.          String var6 = var1.getName(var5);
  391.          if (var6.equals("name")) {
  392.             var3 = var1.getValue(var5);
  393.          } else if (var6.equals("id")) {
  394.             var1.getValue(var5);
  395.          } else if (var6.equals("ref")) {
  396.             var4 = var1.getValue(var5);
  397.          } else {
  398.             this.error(String.valueOf("Unrecognized attribute for 'attributeGroup' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  399.          }
  400.       }
  401.  
  402.       if (var4 != null) {
  403.          if (!this.savedAttrIPEs.containsKey(var4)) {
  404.             this.savedAttrIPEs.put(var4, new InternalPEDeclaration(var4, Class.forName("com.extensibility.xml.AttributeGroup")));
  405.          }
  406.  
  407.          InternalPEDeclaration var7 = (InternalPEDeclaration)this.savedAttrIPEs.get(var4);
  408.          if (!this.currentAttrIPEs.isEmpty()) {
  409.             ((InternalPEDeclaration)this.currentAttrIPEs.peek()).add(var7.getAttributeGroup());
  410.          } else if (this.currentElemDecl != null) {
  411.             this.currentElemDecl.add(var7.getAttributeGroup());
  412.          }
  413.       } else if (var3 != null) {
  414.          if (this.savedAttrIPEs.containsKey(var3)) {
  415.             this.currentIPEDecl = (InternalPEDeclaration)this.savedAttrIPEs.get(var3);
  416.          } else {
  417.             this.currentIPEDecl = new InternalPEDeclaration(var3, Class.forName("com.extensibility.xml.AttributeGroup"));
  418.             this.savedAttrIPEs.put(var3, this.currentIPEDecl);
  419.          }
  420.  
  421.          this.currentIPEDecl.setURI(this.logicalURI);
  422.          this.currentAttrIPEs.push(this.currentIPEDecl);
  423.       }
  424.  
  425.    }
  426.  
  427.    private void doDataType(AttributeList var1) {
  428.       String var2 = null;
  429.       String var3 = null;
  430.  
  431.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  432.          String var5 = var1.getName(var4);
  433.          if (var5.equals("base")) {
  434.             var2 = var1.getValue(var4);
  435.          } else if (var5.equals("name")) {
  436.             var3 = var1.getValue(var4);
  437.          } else {
  438.             this.error(String.valueOf("Unrecognized attribute for 'simpleType' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  439.          }
  440.       }
  441.  
  442.       DataType var6;
  443.       if (var2 != null) {
  444.          var6 = this.convertDataType(var2);
  445.       } else {
  446.          var6 = this.convertDataType("string");
  447.       }
  448.  
  449.       if (this.currentAttrDecl != null) {
  450.          this.currentAttrDecl.setDataType(var6);
  451.       } else if (var3 != null) {
  452.          this.currentDataTypeDecl = new DataTypeDeclaration(var3, var6);
  453.          this.currentDataTypeDecl.setURI(this.logicalURI);
  454.          if (this.dtElemNames.containsKey(var3)) {
  455.             this.error(String.valueOf("datatype name used more than once: ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  456.          } else {
  457.             this.dtElemNames.put(var3, this.currentDataTypeDecl);
  458.          }
  459.       }
  460.  
  461.    }
  462.  
  463.    private void doElement(AttributeList var1) {
  464.       Object var2 = null;
  465.       Object var3 = null;
  466.       Object var4 = null;
  467.       Object var5 = null;
  468.       Object var6 = null;
  469.       Object var7 = null;
  470.       Object var8 = null;
  471.       Object var9 = null;
  472.       String var10 = null;
  473.       String var11 = null;
  474.       String var12 = null;
  475.       Object var13 = null;
  476.       String var14 = null;
  477.       String var15 = null;
  478.  
  479.       for(int var16 = 0; var16 < var1.getLength(); ++var16) {
  480.          String var17 = var1.getName(var16);
  481.          if (var17.equals("abstract")) {
  482.             var1.getValue(var16);
  483.          } else if (var17.equals("block")) {
  484.             var1.getValue(var16);
  485.          } else if (var17.equals("default")) {
  486.             var1.getValue(var16);
  487.          } else if (var17.equals("equivClass")) {
  488.             var1.getValue(var16);
  489.          } else if (var17.equals("final")) {
  490.             var1.getValue(var16);
  491.          } else if (var17.equals("fixed")) {
  492.             var1.getValue(var16);
  493.          } else if (var17.equals("form")) {
  494.             var1.getValue(var16);
  495.          } else if (var17.equals("id")) {
  496.             var1.getValue(var16);
  497.          } else if (var17.equals("maxOccurs")) {
  498.             var11 = var1.getValue(var16);
  499.          } else if (var17.equals("minOccurs")) {
  500.             var10 = var1.getValue(var16);
  501.          } else if (var17.equals("name")) {
  502.             var12 = var1.getValue(var16);
  503.          } else if (var17.equals("nullable")) {
  504.             var1.getValue(var16);
  505.          } else if (var17.equals("ref")) {
  506.             var14 = var1.getValue(var16);
  507.          } else if (var17.equals("type")) {
  508.             var15 = var1.getValue(var16);
  509.          } else {
  510.             this.error(String.valueOf("Unrecognized attribute for 'element' : ").concat(String.valueOf(var17)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  511.          }
  512.       }
  513.  
  514.       Object var24 = null;
  515.       String var18 = null;
  516.       boolean var19 = false;
  517.       String var25;
  518.       if (var14 != null) {
  519.          var25 = var14;
  520.          if (var12 != null) {
  521.             var18 = var12;
  522.          }
  523.  
  524.          this.currentElemName = null;
  525.          var19 = true;
  526.       } else if (var12 != null) {
  527.          var25 = var12;
  528.          this.currentElemName = var12;
  529.       } else {
  530.          var25 = "undefined";
  531.          if (this.currentElemDecl == null) {
  532.             this.currentElemName = var25;
  533.          } else {
  534.             this.currentElemName = null;
  535.          }
  536.  
  537.          this.error("Must have name or ref for 'element' : ", 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  538.       }
  539.  
  540.       ElementDeclaration var20;
  541.       if (this.elemDecls.containsKey(var25)) {
  542.          var20 = (ElementDeclaration)this.elemDecls.get(var25);
  543.       } else {
  544.          var20 = new ElementDeclaration(var25, 3);
  545.          ((BaseDeclaration)var20).setURI(this.logicalURI);
  546.          this.elemDecls.put(var25, var20);
  547.       }
  548.  
  549.       if (this.contentModels.isEmpty() && this.currentElemDecl == null) {
  550.          this.currentElemDecl = var20;
  551.          if (var15 != null) {
  552.             ContentModel var26 = var20.getContentModel();
  553.             var20.setDataType(this.convertDataType(var15));
  554.          }
  555.  
  556.          this.topLevelElemName = var12;
  557.       } else {
  558.          char var21 = this.getCurrentConnection();
  559.          ContentModelTerm var22 = this.getCurrentParent();
  560.          ContentModelTerm var23 = new ContentModelTerm(new TypeRef(var25), '\u0000', var21);
  561.          if (var19 && var18 != null) {
  562.             var23.setLocalTag(var18);
  563.          }
  564.  
  565.          this.setOccurance(var23, var10, var11);
  566.          var22.addTerm(var23);
  567.       }
  568.  
  569.    }
  570.  
  571.    private void doGroup(String var1, AttributeList var2) {
  572.       Object var3 = null;
  573.       String var4 = null;
  574.       String var5 = null;
  575.       String var6 = null;
  576.       String var7 = null;
  577.  
  578.       for(int var8 = 0; var8 < var2.getLength(); ++var8) {
  579.          String var9 = var2.getName(var8);
  580.          if (var9.equals("id")) {
  581.             var2.getValue(var8);
  582.          } else if (var9.equals("maxOccurs")) {
  583.             var4 = var2.getValue(var8);
  584.          } else if (var9.equals("minOccurs")) {
  585.             var5 = var2.getValue(var8);
  586.          } else if (var9.equals("name")) {
  587.             var6 = var2.getValue(var8);
  588.             if (!var1.equals("group")) {
  589.                this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognized attribute for '").concat(String.valueOf(var1))).concat(String.valueOf("' : "))).concat(String.valueOf(var9)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  590.             }
  591.          } else if (var9.equals("ref")) {
  592.             var7 = var2.getValue(var8);
  593.             if (!var1.equals("group")) {
  594.                this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognized attribute for '").concat(String.valueOf(var1))).concat(String.valueOf("' : "))).concat(String.valueOf(var9)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  595.             }
  596.          } else {
  597.             this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognized attribute for '").concat(String.valueOf(var1))).concat(String.valueOf("' : "))).concat(String.valueOf(var9)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  598.          }
  599.       }
  600.  
  601.       if (this.contentModels.isEmpty()) {
  602.          if (var1.equals("group")) {
  603.             if (var6 == null) {
  604.                this.error(String.valueOf(String.valueOf("Name is required for schema-level '").concat(String.valueOf(var1))).concat(String.valueOf("' -- setting to 'undefined'.")), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  605.                var6 = "undefined";
  606.             }
  607.  
  608.             if (this.savedContentIPEs.containsKey(var6)) {
  609.                this.currentIPEDecl = (InternalPEDeclaration)this.savedContentIPEs.get(var6);
  610.             } else {
  611.                this.currentIPEDecl = new InternalPEDeclaration(var6, Class.forName("com.extensibility.xml.ContentModelTerm"));
  612.                this.savedContentIPEs.put(var6, this.currentIPEDecl);
  613.             }
  614.  
  615.             this.currentIPEDecl.setURI(this.logicalURI);
  616.             this.currentContentIPEs.push(this.currentIPEDecl);
  617.             this.currentCM = this.currentIPEDecl.createContentModel();
  618.             this.currentCM.setContentModel(6);
  619.             this.cmClosed = false;
  620.             this.isFirstLevelCM = true;
  621.             this.cmConnectors.push(new Character(','));
  622.             this.contentModels.push(this.currentCM.getRootGroup());
  623.          } else {
  624.             this.error(String.valueOf(String.valueOf("Element not allowed at schema-level: '").concat(String.valueOf(var1))).concat(String.valueOf("'")), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  625.          }
  626.  
  627.       } else if (var7 != null && var1.equals("group")) {
  628.          if (!this.savedContentIPEs.containsKey(var7)) {
  629.             this.savedContentIPEs.put(var7, new InternalPEDeclaration(var7, Class.forName("com.extensibility.xml.ContentModelTerm")));
  630.          }
  631.  
  632.          InternalPEDeclaration var14 = (InternalPEDeclaration)this.savedContentIPEs.get(var7);
  633.          ContentModelTerm var15 = this.getCurrentParent();
  634.          ContentModel var11 = var14.getContentModel();
  635.          var15.addTerm(var11);
  636.       } else {
  637.          if (var7 != null && !var1.equals("group")) {
  638.             this.error(String.valueOf(String.valueOf("'ref' not allowed for: '").concat(String.valueOf(var1))).concat(String.valueOf("'")), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  639.          }
  640.  
  641.          char var12 = ',';
  642.          if (var1.equals("all")) {
  643.             var12 = ',';
  644.          } else if (var1.equals("choice")) {
  645.             var12 = '|';
  646.          } else if (var1.equals("sequence")) {
  647.             var12 = ',';
  648.          } else {
  649.             var12 = ',';
  650.          }
  651.  
  652.          ContentModelTerm var10 = new ContentModelTerm();
  653.          this.setOccurance(var10, var5, var4);
  654.          var10.setConnection(this.getCurrentConnection());
  655.          if (this.isFirstLevelCM) {
  656.             this.getCurrentParent().setLocalTag(var6);
  657.             this.getCurrentParent().setOccurance(var10.getMinOccurance(), var10.getMaxOccurance());
  658.             this.getCurrentParent().setConnection(var10.getConnection());
  659.             this.cmConnectors.pop();
  660.             this.cmConnectors.push(new Character(var12));
  661.          } else {
  662.             this.getCurrentParent().addTerm(var10);
  663.             this.contentModels.push(var10);
  664.             this.cmConnectors.push(new Character(var12));
  665.          }
  666.  
  667.          this.isFirstLevelCM = false;
  668.       }
  669.    }
  670.  
  671.    private void doNotation(AttributeList var1) {
  672.       Object var2 = null;
  673.       String var3 = null;
  674.       String var4 = null;
  675.       String var5 = null;
  676.  
  677.       for(int var6 = 0; var6 < var1.getLength(); ++var6) {
  678.          String var7 = var1.getName(var6);
  679.          if (var7.equals("id")) {
  680.             var1.getValue(var6);
  681.          } else if (var7.equals("name")) {
  682.             var3 = var1.getValue(var6);
  683.          } else if (var7.equals("public")) {
  684.             var4 = var1.getValue(var6);
  685.          } else if (var7.equals("system")) {
  686.             var5 = var1.getValue(var6);
  687.          } else {
  688.             this.error(String.valueOf("Unrecognized attribute for 'notation' : ").concat(String.valueOf(var7)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  689.          }
  690.       }
  691.  
  692.       NotationDeclaration var8 = new NotationDeclaration(var3, var4, new URI((URI)null, var5));
  693.       this.schema.insertDeclaration(var8, (BaseDeclaration)null);
  694.       this.currentNotationDecl = var8;
  695.    }
  696.  
  697.    private void doKey(AttributeList var1) {
  698.       Object var2 = null;
  699.  
  700.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  701.          String var4 = var1.getName(var3);
  702.          if (var4.equals("name")) {
  703.             var1.getValue(var3);
  704.          } else {
  705.             this.error(String.valueOf("Unrecognized attribute for 'key' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  706.          }
  707.       }
  708.  
  709.    }
  710.  
  711.    private void doKeyRef(AttributeList var1) {
  712.       Object var2 = null;
  713.       Object var3 = null;
  714.  
  715.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  716.          String var5 = var1.getName(var4);
  717.          if (var5.equals("name")) {
  718.             var1.getValue(var4);
  719.          } else if (var5.equals("refer")) {
  720.             var1.getValue(var4);
  721.          } else {
  722.             this.error(String.valueOf("Unrecognized attribute for 'keyref' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  723.          }
  724.       }
  725.  
  726.    }
  727.  
  728.    private void doUnique(AttributeList var1) {
  729.       Object var2 = null;
  730.  
  731.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  732.          String var4 = var1.getName(var3);
  733.          if (var4.equals("name")) {
  734.             var1.getValue(var3);
  735.          } else {
  736.             this.error(String.valueOf("Unrecognized attribute for 'unique' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  737.          }
  738.       }
  739.  
  740.    }
  741.  
  742.    private void doAny(AttributeList var1) {
  743.       Object var2 = null;
  744.       Object var3 = null;
  745.       Object var4 = null;
  746.  
  747.       for(int var5 = 0; var5 < var1.getLength(); ++var5) {
  748.          String var6 = var1.getName(var5);
  749.          if (var6.equals("maxOccurs")) {
  750.             var1.getValue(var5);
  751.          } else if (var6.equals("minOccurs")) {
  752.             var1.getValue(var5);
  753.          } else if (var6.equals("namespace")) {
  754.             var1.getValue(var5);
  755.          } else {
  756.             this.error(String.valueOf("Unrecognized attribute for 'any' : ").concat(String.valueOf(var6)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  757.          }
  758.       }
  759.  
  760.    }
  761.  
  762.    private void doAnyAttribute(AttributeList var1) {
  763.       Object var2 = null;
  764.  
  765.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  766.          String var4 = var1.getName(var3);
  767.          if (var4.equals("namespace")) {
  768.             var1.getValue(var3);
  769.          } else {
  770.             this.error(String.valueOf("Unrecognized attribute for 'anyAttribute' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  771.          }
  772.       }
  773.  
  774.    }
  775.  
  776.    private void doAppInfo(AttributeList var1) {
  777.       Object var2 = null;
  778.  
  779.       for(int var3 = 0; var3 < var1.getLength(); ++var3) {
  780.          String var4 = var1.getName(var3);
  781.          if (var4.equals("source")) {
  782.             var1.getValue(var3);
  783.          } else {
  784.             this.error(String.valueOf("Unrecognized attribute for 'appinfo' : ").concat(String.valueOf(var4)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  785.          }
  786.       }
  787.  
  788.       this.commentStart = true;
  789.    }
  790.  
  791.    private void doAttribute(AttributeList var1) {
  792.       String var2 = null;
  793.       String var3 = null;
  794.       String var4 = null;
  795.       String var5 = null;
  796.       Object var6 = null;
  797.       Object var7 = null;
  798.       Object var8 = null;
  799.  
  800.       for(int var9 = 0; var9 < var1.getLength(); ++var9) {
  801.          String var10 = var1.getName(var9);
  802.          if (var10.equals("value")) {
  803.             var3 = var1.getValue(var9);
  804.          } else if (var10.equals("use")) {
  805.             var2 = var1.getValue(var9);
  806.          } else if (var10.equals("name")) {
  807.             var4 = var1.getValue(var9);
  808.          } else if (var10.equals("type")) {
  809.             var5 = var1.getValue(var9);
  810.          } else if (var10.equals("id")) {
  811.             var1.getValue(var9);
  812.          } else if (var10.equals("form")) {
  813.             var1.getValue(var9);
  814.          } else if (var10.equals("ref")) {
  815.             var1.getValue(var9);
  816.          } else {
  817.             this.error(String.valueOf("Unrecognized attribute for 'attribute' : ").concat(String.valueOf(var10)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  818.          }
  819.       }
  820.  
  821.       DataType var13;
  822.       if (var5 != null) {
  823.          var13 = this.convertDataType(var5);
  824.       } else {
  825.          var13 = this.convertDataType("string");
  826.       }
  827.  
  828.       boolean var11 = false;
  829.       if (var2 != null && (var2.equals("required") || var2.equals("fixed"))) {
  830.          var11 = true;
  831.       }
  832.  
  833.       if (!this.currentAttrIPEs.isEmpty()) {
  834.          InternalPEDeclaration var12 = (InternalPEDeclaration)this.currentAttrIPEs.peek();
  835.          this.currentAttrDecl = new AttributeDeclaration(var12, var4, var13, (Vector)null, var11, var3);
  836.          this.currentAttrDecl.setURI(((BaseDeclaration)var12).getURI());
  837.          var12.add(this.currentAttrDecl);
  838.       } else if (this.currentElemDecl != null) {
  839.          this.currentAttrDecl = new AttributeDeclaration(this.currentElemDecl, var4, var13, (Vector)null, var11, var3);
  840.          this.currentAttrDecl.setURI(this.currentElemDecl.getURI());
  841.          this.elemDeclAttrs.addElement(this.currentAttrDecl);
  842.          this.currentAttrs.put(var4, this.currentAttrDecl);
  843.       }
  844.  
  845.    }
  846.  
  847.    private void doField(AttributeList var1) {
  848.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  849.          String var3 = var1.getName(var2);
  850.          this.error(String.valueOf("Unrecognized attribute for 'field' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  851.       }
  852.  
  853.    }
  854.  
  855.    private void doDocumentation(AttributeList var1) {
  856.       Object var2 = null;
  857.       Object var3 = null;
  858.  
  859.       for(int var4 = 0; var4 < var1.getLength(); ++var4) {
  860.          String var5 = var1.getName(var4);
  861.          if (var5.equals("source")) {
  862.             var1.getValue(var4);
  863.          } else if (var5.equals("xml:lang")) {
  864.             var1.getValue(var4);
  865.          } else {
  866.             this.error(String.valueOf("Unrecognized attribute for 'documentation' : ").concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  867.          }
  868.       }
  869.  
  870.       this.commentStart = true;
  871.       this.commentKind = "USAGE";
  872.    }
  873.  
  874.    private void doSelector(AttributeList var1) {
  875.       for(int var2 = 0; var2 < var1.getLength(); ++var2) {
  876.          String var3 = var1.getName(var2);
  877.          this.error(String.valueOf("Unrecognized attribute for 'selector' : ").concat(String.valueOf(var3)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  878.       }
  879.  
  880.    }
  881.  
  882.    private boolean isFacetTag(String var1) {
  883.       return var1.equals("encoding") || var1.equals("enumeration") || var1.equals("length") || var1.equals("maxExclusive") || var1.equals("maxInclusive") || var1.equals("maxLength") || var1.equals("minExclusive") || var1.equals("minInclusive") || var1.equals("minLength") || var1.equals("pattern") || var1.equals("period") || var1.equals("precision") || var1.equals("scale");
  884.    }
  885.  
  886.    private void doFacet(String var1, AttributeList var2) {
  887.       String var3 = null;
  888.  
  889.       for(int var4 = 0; var4 < var2.getLength(); ++var4) {
  890.          String var5 = var2.getName(var4);
  891.          if (var5.equals("value")) {
  892.             var3 = var2.getValue(var4);
  893.          } else {
  894.             this.error(String.valueOf(String.valueOf(String.valueOf("Unrecognized attribute for '").concat(String.valueOf(var1))).concat(String.valueOf("' facet element : "))).concat(String.valueOf(var5)), 999, this.locator.getLineNumber(), this.locator.getColumnNumber());
  895.          }
  896.       }
  897.  
  898.       Object var8 = null;
  899.       DataType var9;
  900.       if (this.currentAttrDecl != null) {
  901.          var9 = this.currentAttrDecl.getDataType();
  902.       } else {
  903.          if (this.currentDataTypeDecl == null) {
  904.             return;
  905.          }
  906.  
  907.          var9 = this.currentDataTypeDecl.getDataType();
  908.       }
  909.  
  910.       Object var6 = null;
  911.       Facet var7 = null;
  912.       if (var1.equals("enumeration")) {
  913.          this.attrChoices.addElement(var3);
  914.       } else {
  915.          Facet var10;
  916.          if (var1.equals("encoding")) {
  917.             var10 = new Facet(Facet.FACET_ENCODING_NAME, var3);
  918.          } else if (var1.equals("length")) {
  919.             var10 = new Facet(Facet.FACET_LENGTH_NAME, var3);
  920.          } else if (var1.equals("maxExclusive")) {
  921.             var10 = new Facet(Facet.FACET_MAX_NAME, var3);
  922.             var7 = new Facet(Facet.FACET_MAXEX_NAME, "true");
  923.          } else if (var1.equals("maxInclusive")) {
  924.             var10 = new Facet(Facet.FACET_MAX_NAME, var3);
  925.          } else if (var1.equals("maxLength")) {
  926.             var10 = new Facet(Facet.FACET_MAXLENGTH_NAME, var3);
  927.          } else if (var1.equals("minExclusive")) {
  928.             var10 = new Facet(Facet.FACET_MIN_NAME, var3);
  929.             var7 = new Facet(Facet.FACET_MINEX_NAME, "true");
  930.          } else if (var1.equals("minInclusive")) {
  931.             var10 = new Facet(Facet.FACET_MIN_NAME, var3);
  932.          } else if (var1.equals("minLength")) {
  933.             var10 = new Facet(Facet.FACET_MINLENGTH_NAME, var3);
  934.          } else if (var1.equals("pattern")) {
  935.             var10 = new Facet(Facet.FACET_PATTERN_NAME, var3);
  936.          } else if (var1.equals("period")) {
  937.             var10 = new Facet(Facet.FACET_PERIOD_NAME, var3);
  938.          } else if (var1.equals("precision")) {
  939.             var10 = new Facet(Facet.FACET_DIGITS_NAME, var3);
  940.          } else {
  941.             if (!var1.equals("scale")) {
  942.                return;
  943.             }
  944.  
  945.             var10 = new Facet(Facet.FACET_DECIMALS_NAME, var3);
  946.          }
  947.  
  948.          if (var10 != null) {
  949.             var9 = (DataType)var9.applyFacet(var10);
  950.          }
  951.  
  952.          if (var7 != null) {
  953.             var9 = (DataType)var9.applyFacet(var7);
  954.          }
  955.  
  956.          if (this.currentAttrDecl != null) {
  957.             this.currentAttrDecl.setDataType(var9);
  958.          } else {
  959.             if (this.currentDataTypeDecl == null) {
  960.                return;
  961.             }
  962.  
  963.             this.currentDataTypeDecl.setDataType(var9);
  964.          }
  965.  
  966.       }
  967.    }
  968.  
  969.    public void parseElement(String var1, AttributeList var2) {
  970.       if (var1.equals("schema")) {
  971.          this.doSchema(var2);
  972.       } else if (var1.equals("import")) {
  973.          this.doImport(var2);
  974.       } else if (var1.equals("include")) {
  975.          this.doInclude(var2);
  976.       } else if (var1.equals("complexType")) {
  977.          this.doType(var2);
  978.       } else if (var1.equals("annotation")) {
  979.          this.doAnnotation(var2);
  980.       } else if (var1.equals("attribute")) {
  981.          this.doAttribute(var2);
  982.       } else if (var1.equals("attributeGroup")) {
  983.          this.doAttrGroup(var2);
  984.       } else if (var1.equals("simpleType")) {
  985.          this.doDataType(var2);
  986.       } else if (var1.equals("element")) {
  987.          this.doElement(var2);
  988.       } else if (var1.equals("group")) {
  989.          this.doGroup(var1, var2);
  990.       } else if (var1.equals("notation")) {
  991.          this.doNotation(var2);
  992.       } else if (var1.equals("all")) {
  993.          this.doGroup(var1, var2);
  994.       } else if (var1.equals("any")) {
  995.          this.doAny(var2);
  996.       } else if (var1.equals("anyAttribute")) {
  997.          this.doAnyAttribute(var2);
  998.       } else if (var1.equals("appInfo")) {
  999.          this.doAppInfo(var2);
  1000.       } else if (var1.equals("choice")) {
  1001.          this.doGroup(var1, var2);
  1002.       } else if (var1.equals("field")) {
  1003.          this.doField(var2);
  1004.       } else if (var1.equals("documentation")) {
  1005.          this.doDocumentation(var2);
  1006.       } else if (var1.equals("key")) {
  1007.          this.doKey(var2);
  1008.       } else if (var1.equals("keyref")) {
  1009.          this.doKeyRef(var2);
  1010.       } else if (var1.equals("selector")) {
  1011.          this.doSelector(var2);
  1012.       } else if (var1.equals("sequence")) {
  1013.          this.doGroup(var1, var2);
  1014.       } else if (var1.equals("unique")) {
  1015.          this.doUnique(var2);
  1016.       } else if (this.isFacetTag(var1)) {
  1017.          this.doFacet(var1, var2);
  1018.       } else {
  1019.          this.error(var1, 239, this.locator.getLineNumber(), this.locator.getColumnNumber());
  1020.       }
  1021.  
  1022.    }
  1023.  
  1024.    private void saveElementDecl() {
  1025.       if (this.currentElemDecl != null) {
  1026.          ContentModel var1 = this.currentElemDecl.getContentModel();
  1027.          if (var1 != null && var1.isMixed()) {
  1028.             ContentModelTerm var2 = var1.getRootGroup();
  1029.             if (var2 != null && var2.getOccurance() != '*' && var2.isGroup() && var2.getOwner() == this.currentElemDecl) {
  1030.                var2.setOccurance('*');
  1031.             }
  1032.          }
  1033.  
  1034.          this.schema.insertDeclaration(this.currentElemDecl, (BaseDeclaration)null);
  1035.          this.currentElemDecl = null;
  1036.  
  1037.          for(int var4 = 0; var4 < this.elemDeclAttrs.size(); ++var4) {
  1038.             AttributeDeclaration var3 = (AttributeDeclaration)this.elemDeclAttrs.elementAt(var4);
  1039.             this.schema.insertDeclaration(var3, (BaseDeclaration)null);
  1040.          }
  1041.  
  1042.          this.elemDeclAttrs.removeAllElements();
  1043.          this.currentAttrs.clear();
  1044.          if (!this.contentModels.empty()) {
  1045.             this.contentModels.removeAllElements();
  1046.          }
  1047.  
  1048.          if (!this.cmConnectors.empty()) {
  1049.             this.cmConnectors.removeAllElements();
  1050.          }
  1051.  
  1052.          this.cmClosed = true;
  1053.          this.isFirstLevelCM = false;
  1054.          this.topLevelElemName = null;
  1055.       }
  1056.    }
  1057.  
  1058.    public void endElement(String var1) {
  1059.       if (var1.equals("complexType")) {
  1060.          this.saveElementDecl();
  1061.       } else if (var1.equals("group")) {
  1062.          if (!this.currentContentIPEs.isEmpty()) {
  1063.             InternalPEDeclaration var2 = (InternalPEDeclaration)this.currentContentIPEs.pop();
  1064.             var2.updateValue();
  1065.             this.schema.insertDeclaration(var2, (BaseDeclaration)null);
  1066.             if (!this.currentContentIPEs.isEmpty()) {
  1067.                this.currentIPEDecl = (InternalPEDeclaration)this.currentContentIPEs.peek();
  1068.             }
  1069.  
  1070.             if (!this.contentModels.empty()) {
  1071.                this.contentModels.removeAllElements();
  1072.             }
  1073.  
  1074.             if (!this.cmConnectors.empty()) {
  1075.                this.cmConnectors.removeAllElements();
  1076.             }
  1077.  
  1078.             this.cmClosed = true;
  1079.             this.isFirstLevelCM = false;
  1080.          } else {
  1081.             if (this.cmConnectors.size() > 1) {
  1082.                this.cmConnectors.pop();
  1083.             }
  1084.  
  1085.             if (this.contentModels.size() > 1) {
  1086.                this.contentModels.pop();
  1087.             }
  1088.          }
  1089.       } else if (!var1.equals("all") && !var1.equals("choice") && !var1.equals("sequence")) {
  1090.          if (var1.equals("element")) {
  1091.             if (this.currentElemName != null && this.currentElemName.equals(this.topLevelElemName)) {
  1092.                this.saveElementDecl();
  1093.             }
  1094.  
  1095.             this.currentElemName = null;
  1096.          } else if (var1.equals("attribute")) {
  1097.             if (this.attrChoices.size() > 0) {
  1098.                Vector var6 = new Vector();
  1099.  
  1100.                for(int var3 = 0; var3 < this.attrChoices.size(); ++var3) {
  1101.                   var6.addElement(this.attrChoices.elementAt(var3));
  1102.                }
  1103.  
  1104.                this.currentAttrDecl.setChoices(var6);
  1105.             }
  1106.  
  1107.             this.currentAttrDecl = null;
  1108.             this.attrChoices.removeAllElements();
  1109.          } else if (var1.equals("simpleType")) {
  1110.             if (this.currentDataTypeDecl != null) {
  1111.                if (this.attrChoices.size() > 0) {
  1112.                   Vector var7 = new Vector();
  1113.  
  1114.                   for(int var8 = 0; var8 < this.attrChoices.size(); ++var8) {
  1115.                      var7.addElement(this.attrChoices.elementAt(var8));
  1116.                   }
  1117.  
  1118.                   Facet var4 = new Facet(Facet.FACET_ENUM_NAME, var7);
  1119.                   DataType var5 = this.currentDataTypeDecl.getDataType();
  1120.                   var5 = (DataType)var5.applyFacet(var4);
  1121.                   this.currentDataTypeDecl.setDataType(var5);
  1122.                }
  1123.  
  1124.                this.schema.insertDeclaration(this.currentDataTypeDecl, (BaseDeclaration)null);
  1125.             }
  1126.  
  1127.             this.currentDataTypeDecl = null;
  1128.             if (this.currentAttrDecl == null) {
  1129.                this.attrChoices.removeAllElements();
  1130.             }
  1131.          } else if (var1.equals("attributeGroup")) {
  1132.             if (!this.currentAttrIPEs.isEmpty()) {
  1133.                this.schema.insertDeclaration((InternalPEDeclaration)this.currentAttrIPEs.pop(), (BaseDeclaration)null);
  1134.                this.elemDeclAttrs.removeAllElements();
  1135.                this.currentAttrs.clear();
  1136.             }
  1137.          } else if (var1.equals("appInfo") || var1.equals("documentation")) {
  1138.             this.commentStart = false;
  1139.             if (this.commentContent.length() > 0) {
  1140.                if (this.currentAttrDecl != null) {
  1141.                   this.currentAttrDecl.addComment(new Comment((String)this.commentKind, this.commentContent.toString()));
  1142.                } else if (this.currentElemDecl != null) {
  1143.                   this.currentElemDecl.addComment(new Comment((String)this.commentKind, this.commentContent.toString()));
  1144.                } else if (this.currentIPEDecl != null) {
  1145.                   this.currentIPEDecl.addComment(new Comment((String)this.commentKind, this.commentContent.toString()));
  1146.                } else if (this.currentDataTypeDecl != null) {
  1147.                   this.currentDataTypeDecl.addComment(new Comment((String)this.commentKind, this.commentContent.toString()));
  1148.                } else {
  1149.                   this.schema.addComment(new Comment((String)this.commentKind, this.commentContent.toString()));
  1150.                }
  1151.             }
  1152.  
  1153.             this.commentKind = null;
  1154.             this.commentContent.setLength(0);
  1155.          }
  1156.       } else {
  1157.          if (this.cmConnectors.size() > 1) {
  1158.             this.cmConnectors.pop();
  1159.          }
  1160.  
  1161.          if (this.contentModels.size() > 1) {
  1162.             this.contentModels.pop();
  1163.          }
  1164.       }
  1165.  
  1166.    }
  1167.  
  1168.    public void characters(char[] var1, int var2, int var3) throws SAXException {
  1169.       if (this.commentStart) {
  1170.          this.commentContent.append(var1, var2, var3);
  1171.       }
  1172.  
  1173.    }
  1174.  
  1175.    private DataType convertDataType(String var1) {
  1176.       String var2 = DataTypeIntf.STRING;
  1177.       if (var1 != null) {
  1178.          if (var1.equals("binary")) {
  1179.             var2 = DataTypeIntf.BINBASE64;
  1180.          } else if (var1.equals("integer")) {
  1181.             var2 = DataTypeIntf.INT;
  1182.          } else if (var1.equals("double")) {
  1183.             var2 = DataTypeIntf.R8;
  1184.          } else if (var1.equals("timeInstant")) {
  1185.             var2 = DataTypeIntf.DATETIME;
  1186.          } else {
  1187.             var2 = var1;
  1188.          }
  1189.       }
  1190.  
  1191.       return DataTypeFactory.createDataType(var2);
  1192.    }
  1193.  
  1194.    protected void setOccurance(ContentModelTerm var1, Object var2, Object var3) {
  1195.       boolean var4 = false;
  1196.       if (var2 == null) {
  1197.          var2 = new String("1");
  1198.       }
  1199.  
  1200.       if (var3 == null) {
  1201.          var3 = new String("1");
  1202.       }
  1203.  
  1204.       if (((String)var2).equals("1") && ((String)var3).equals("1")) {
  1205.          var1.setOccurance('\u0000');
  1206.       } else if (((String)var2).equals("0") && ((String)var3).equals("1")) {
  1207.          var1.setOccurance('?');
  1208.       } else if (((String)var2).equals("0") && ((String)var3).equals("unbounded")) {
  1209.          var1.setOccurance('*');
  1210.       } else if (((String)var2).equals("1") && ((String)var3).equals("unbounded")) {
  1211.          var1.setOccurance('+');
  1212.       } else {
  1213.          int[] var5 = new int[]{1, 1};
  1214.  
  1215.          try {
  1216.             var5[0] = Integer.parseInt((String)var2);
  1217.             var5[1] = Integer.parseInt((String)var3);
  1218.          } catch (Exception var7) {
  1219.          }
  1220.  
  1221.          var1.setOccurance(var5[0], var5[1]);
  1222.       }
  1223.  
  1224.    }
  1225. }
  1226.